
import java.lang.reflect.Field;

// 利用反射创建对象
public class EmpDemo02 {

    public static void main(String[] args) {

        try {
            // 2. 反射
            // 2.1 创建class对象 ： 全限定路径名： 包名+类名
            // Class 类里 封装了 指定类的相关信息
            // 属性 + 构选器 + 方法 + 创建对象
            Class c1 = Class.forName("org.nextcore.entity.Emp");

            System.out.println("====属性操作===============");
            // 属性： ==> Filed对象
            // 获取所有属性的信息 : 方式1
            System.out.println("获取所有属性:方式1getFields : public ");
            Field[] fs1 = c1.getFields();

            // for ==> 普能循环:
            // 1.使用下标 for(int xx; xx; xx);
            // 2. for(集合：临时变量) 加强for循环
            // 3. 用迭代器
            // 4. 流
            // while 死循环 do while 至少执行一次
            for (Field field : fs1) {
                System.out.println("属性名：" + field.getName());
                System.out.println("属性类型：" + field.getType().getName());
            }
            System.out.println("----------------------");
            System.out.println("获取所有属性:方式2： 所有属性");
            // select * from emp where eid = 1001; eid:1001 ename:张三

            // 获取所有属性的信息 : 方式2
            Field[] fs2 = c1.getDeclaredFields();
            for (Field field : fs2) {
                System.out.println("属性名：" + field.getName());
                System.out.println("属性类型：" + field.getType().getName());
            }

            System.out.println("获取单个属性:方式1： 所有属性");
            Field fd1 = c1.getDeclaredField("eid");
            System.out.println("属性名：" + fd1.getName());
            System.out.println("属性类型：" + fd1.getType().getName());

        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }

    }

    @Override
    public String toString() {
        return "EmpDemo02 []";
    }
}
